﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sakura.Games.StgFramework.Builder
{
	/// <summary>
	/// 表示伤害类型修正表。
	/// </summary>
	public class DamageFixTable
	{
		/// <summary>
		/// 伤害类型的内部数据表。
		/// </summary>
		private readonly Dictionary<DamageType, double> _InnerTable;

		/// <summary>
		/// 初始化一个新的伤害类型修正表。
		/// </summary>
		public DamageFixTable()
		{
			this._InnerTable = new Dictionary<DamageType, double>();
		}

		/// <summary>
		/// 表示没有任何修正的伤害系数。该数据为零。
		/// </summary>
		public const double NoFixCoeffecient = 0;

		/// <summary>
		/// 获取或设置指定的伤害类型。
		/// </summary>
		/// <param name="type">要获取或设置的伤害类型。</param>
		/// <returns>指定伤害类型的修正系数。</returns>
		public double this[DamageType type]
		{
			get
			{
				return this._InnerTable[type];
			}
			set
			{
				this._InnerTable[type] = value;
			}
		}

		/// <summary>
		/// 尝试获得某个伤害的修正系数。
		/// </summary>
		/// <param name="type">要获取修正系数的伤害类型。</param>
		/// <returns>该伤害的修正系数。如果修正系数不存在，则返回 <see cref="NoFixCoeffecient"/>。</returns>
		public double TryGetFix(DamageType type)
		{
			if (this._InnerTable.ContainsKey(type))
			{
				return this._InnerTable[type];
			}
			else
			{
				return NoFixCoeffecient;
			}
		}
	}
}
